package frames;

import java.awt.EventQueue;
import java.awt.FlowLayout;

import javax.swing.JFrame;


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.LinkedList;
import java.util.List;

import frames.JFrameJuego;

public class pantallaInicial extends JFrame {

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					pantallaInicial frame = new pantallaInicial();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	private JRadioButton rdbtnEulo;
	private JRadioButton rdbtnMoon;
	private JButton btnComenzarPartida;
	private JLabel jButtonEulo;
	private JToolBar toolBarEULO;
	private JToolBar toolBarMOON;
	private JLabel jButtonMoon;
	private int [] puntajes;
	private JTextArea textArea;

	/**
	 * Create the frame.
	 */
	public pantallaInicial() {
		super("Rescate en el Atlantico");
		puntajes=this.countLines();
		this.bubbleSort(puntajes);
		vaciarArchivo("puntajes.txt");
		escribirArchivoOrdenado("puntajes.txt");
		getContentPane().setBackground(new Color(100, 149, 237));
		setResizable(false);
		initGUI();
	}

	public void initGUI(){
		try{
			setResizable(false);
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			getContentPane().setLayout(null);
			getContentPane().setSize(530,250);	
			{
			rdbtnEulo = new JRadioButton("EULO");
			rdbtnEulo.setBackground(new Color(100, 149, 237));
			rdbtnEulo.setBounds(62, 37, 62, 23);
			getContentPane().add(rdbtnEulo);
			}
			{
			rdbtnMoon = new JRadioButton("MOON");
			rdbtnMoon.setBackground(new Color(100, 149, 237));
			rdbtnMoon.setBounds(62, 97, 76, 23);
			getContentPane().add(rdbtnMoon);
			}
			{
			btnComenzarPartida = new JButton("JUGAR");
			btnComenzarPartida.setBackground(new Color(100, 149, 237));
			btnComenzarPartida.setBounds(45, 157, 166, 25);
			getContentPane().add(btnComenzarPartida);
			btnComenzarPartida.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					startButtonActionEvent(evt);	
				}				
			});
			}
			{
			toolBarEULO = new JToolBar();
			toolBarEULO.setLocation(121,37);
			toolBarEULO.setSize(40,40);
			toolBarEULO.setLayout( new FlowLayout(FlowLayout.LEFT));
			getContentPane().add(toolBarEULO);
			toolBarEULO.setBackground(new Color(100, 149, 237));
			toolBarEULO.setFloatable(false);
			toolBarEULO.setVisible(true);

			{
				jButtonEulo = new JLabel();
				toolBarEULO.add(jButtonEulo);
				jButtonEulo.setIcon(new ImageIcon(getClass().getClassLoader().getResource("images/eulo.gif")));
				jButtonEulo.setOpaque(false);
				jButtonEulo.setFocusable(false);
			}
			}
			{
			toolBarMOON = new JToolBar();
			toolBarMOON.setLocation(132,92);
			toolBarMOON.setSize(40,40);
			toolBarMOON.setLayout( new FlowLayout(FlowLayout.LEFT));
			getContentPane().add(toolBarMOON);
			toolBarMOON.setBackground(new Color(100, 149, 237));
			toolBarMOON.setFloatable(false);
			toolBarMOON.setVisible(true);
				{
					jButtonMoon = new JLabel();
					toolBarMOON.add(jButtonMoon);
					jButtonMoon.setIcon(new ImageIcon(getClass().getClassLoader().getResource("images/moon.gif")));
					jButtonMoon.setOpaque(false);
					jButtonMoon.setFocusable(false);
				}
			}
			{
			textArea = new JTextArea();
			textArea.setLocation(295, 65);
			textArea.setSize(193, 85);
			agregarPuntajes("puntajes.txt",textArea);
			textArea.setLineWrap(true);
			textArea.setEditable(false);
			textArea.setVisible(true);
			getContentPane().add(textArea);
			}
			
			JLabel lblMayoresPuntajes = new JLabel("MAYORES PUNTAJES");
			lblMayoresPuntajes.setBounds(326, 41, 145, 15);
			getContentPane().add(lblMayoresPuntajes);
			pack();
			this.setSize(530,250);
		} catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}
	
	/**
	 * funcion que agrega los 5 mejores puntajes que hay en el juego hasta el momento
	 * @param s nombre del archivo
	 * @param area area donde se visualizaran los 5 mejores puntajes
	 */
	private void agregarPuntajes(String s, JTextArea area) {
		try{
			FileReader reader= new FileReader(s);
			BufferedReader br= new BufferedReader(reader);
			String puntajes="";
			String line;
			int i=0;
			while ((line = br.readLine()) != null && i<5) {
				puntajes+=line+"\n";
				i++;
			}
			area.append(puntajes);
			br.close();
			area.requestFocus();
		}
		catch(Exception e){
			JOptionPane.showMessageDialog(null, e);
		}
	}

	/**
	 * manejo del boton para comenzar el juego, donde para poder comenzar es imprescindible seleccionar una nave
	 * @param evt
	 */
	private void startButtonActionEvent(ActionEvent evt) {
		String nave=null;
			if(rdbtnEulo.isSelected())
				nave="eulo";
				else
					if(rdbtnMoon.isSelected())
						nave="moon";
			if(nave==null)
				JOptionPane.showMessageDialog(null, "No selecciono alguna nave. El juego no comenzara");	
		if(nave!=null){
			JFrameJuego juego= new JFrameJuego(nave);
			this.setVisible(false);
			juego.setVisible(true);
		}
	}
	
	/**
	 * funcion que crea un arreglo de strings para luego devolverlo como arreglo de enteros
	 * @return
	 */
	private int[] countLines(){
        FileReader fileReader;
		BufferedReader bufferedReader; 
		List<String>lines=new LinkedList<String>();
        String line = null;
		try{
			fileReader = new FileReader("puntajes.txt");
			bufferedReader= new BufferedReader(new FileReader("puntajes.txt"));
			while ((line = bufferedReader.readLine()) != null) {
				lines.add(line);
			}
			bufferedReader.close();
			fileReader.close();
		}
		catch(IOException e){
			e.printStackTrace();
		}
		int[]toRet=arrayNums(lines);
        return toRet;
        }
	
	/**
	 * metodo burbuja que se encarga de ordenar los enteros del arreglo de menor a mayor
	 * @param arr
	 */
	private void bubbleSort(int[] arr) {
	      boolean swapped = true;
	      int j = 0;
	      int tmp;
	      while (swapped) {
	            swapped = false;
	            j++;
	            for (int i = 0; i < arr.length - j; i++) {                                       
	                  if (arr[i] > arr[i + 1]) {                          
	                        tmp = arr[i];
	                        arr[i] = arr[i + 1];
	                        arr[i + 1] = tmp;
	                        swapped = true;
	                  }
	            }                
	      }
	}

	/**
	 * metodo que vacia el archivo para luego ingresar los puntajes ordenados
	 * @param s noombre del archivo
	 */
	private void vaciarArchivo(String s) {
		PrintWriter writer;
		try {
			writer = new PrintWriter(s);
			writer.print("");
			writer.close();
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
	
	/**
	 * metodo que escribe en un archivo de manera ordenada y decreciente los puntajes obtenidos hasta el momento
	 * @param s nombre del archivo
	 */
	private void escribirArchivoOrdenado(String s) {
		 try{  
	           FileWriter fr = new FileWriter(s);  
	           BufferedWriter br = new BufferedWriter(fr);  
	           PrintWriter out = new PrintWriter(br);  
	           for(int i=puntajes.length-1; i>=0; i--){  
	            	   out.write(puntajes[i]+"\n");          
	           }  
	           out.close(); 
	       }  
	         
	       catch(IOException e){  
	       }  
	}
	
	/**
	 * metodo que crea un arrego de enteros a partir de los enteros representados como strings en una lista
	 * @param lineas lista de strings
	 * @return arreglo de enteros
	 */
	private int[] arrayNums(List<String>lineas){
		int[] toRet=new int[lineas.size()];
		int i=0;
		for(String s:lineas){
			if(!s.equals(""))
				toRet[i]=Integer.parseInt(s);
			i++;
		}
		return toRet;
	}
	
}
